#if defined(_MSC_VER)
#pragma once
#endif

#ifndef LM_CORE_RNG_H
#define LM_CORE_RNG_H

#include "lm.h"

// Random Number Declarations
class RNG {
public:
	RNG(uint32_t seed = 5489UL) {
		mti = N+1; /* mti==N+1 means mt[N] is not initialized */
		Seed(seed);
	}

	void Seed(uint32_t seed) const;
	float RandomFloat() const;
	unsigned long RandomUInt() const;

private:
	static const int N = 624;
	mutable unsigned long mt[N]; /* the array for the state vector  */
	mutable int mti;
};



#endif // LM_CORE_RNG_H